b7c924
@@ -206,92 +206,108 @@
public abstract class LogFactory {
 
 		@Override
 		public boolean isFatalEnabled() {
-			return logger.isEnabled(Level.FATAL, null, null);
+			return this.logger.isEnabled(Level.FATAL);
 		}
 
 		@Override
 		public boolean isErrorEnabled() {
-			return logger.isEnabled(Level.ERROR, null, null);
+			return this.logger.isEnabled(Level.ERROR);
 		}
 
 		@Override
 		public boolean isWarnEnabled() {
-			return logger.isEnabled(Level.WARN, null, null);
+			return this.logger.isEnabled(Level.WARN);
 		}
 
 		@Override
 		public boolean isInfoEnabled() {
-			return logger.isEnabled(Level.INFO, null, null);
+			return this.logger.isEnabled(Level.INFO);
 		}
 
 		@Override
 		public boolean isDebugEnabled() {
-			return logger.isEnabled(Level.DEBUG, null, null);
+			return this.logger.isEnabled(Level.DEBUG);
 		}
 
 		@Override
 		public boolean isTraceEnabled() {
-			return logger.isEnabled(Level.TRACE, null, null);
+			return this.logger.isEnabled(Level.TRACE);
 		}
 
 		@Override
 		public void fatal(Object message) {
-			logger.logIfEnabled(FQCN, Level.FATAL, null, message, null);
+			log(Level.FATAL, message, null);
 		}
 
 		@Override
 		public void fatal(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.FATAL, null, message, exception);
+			log(Level.FATAL, message, exception);
 		}
 
 		@Override
 		public void error(Object message) {
-			logger.logIfEnabled(FQCN, Level.ERROR, null, message, null);
+			log(Level.ERROR, message, null);
 		}
 
 		@Override
 		public void error(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.ERROR, null, message, exception);
+			log(Level.ERROR, message, exception);
 		}
 
 		@Override
 		public void warn(Object message) {
-			logger.logIfEnabled(FQCN, Level.WARN, null, message, null);
+			log(Level.WARN, message, null);
 		}
 
 		@Override
 		public void warn(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.WARN, null, message, exception);
+			log(Level.WARN, message, exception);
 		}
 
 		@Override
 		public void info(Object message) {
-			logger.logIfEnabled(FQCN, Level.INFO, null, message, null);
+			log(Level.INFO, message, null);
 		}
 
 		@Override
 		public void info(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.INFO, null, message, exception);
+			log(Level.INFO, message, exception);
 		}
 
 		@Override
 		public void debug(Object message) {
-			logger.logIfEnabled(FQCN, Level.DEBUG, null, message, null);
+			log(Level.DEBUG, message, null);
 		}
 
 		@Override
 		public void debug(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.DEBUG, null, message, exception);
+			log(Level.DEBUG, message, exception);
 		}
 
 		@Override
 		public void trace(Object message) {
-			logger.logIfEnabled(FQCN, Level.TRACE, null, message, null);
+			log(Level.TRACE, message, null);
 		}
 
 		@Override
 		public void trace(Object message, Throwable exception) {
-			logger.logIfEnabled(FQCN, Level.TRACE, null, message, exception);
+			log(Level.TRACE, message, exception);
+		}
+
+		private void log(Level level, Object message, Throwable exception) {
+			if (message instanceof String) {
+				// Explicitly pass a String argument, avoiding Log4j's argument expansion
+				// for message objects in case of "{}" sequences (SPR-16226)
+				if (exception != null) {
+					this.logger.logIfEnabled(FQCN, level, null, (String) message, exception);
+				}
+				else {
+					this.logger.logIfEnabled(FQCN, level, null, (String) message);
+				}
+			}
+			else {
+				this.logger.logIfEnabled(FQCN, level, null, message, exception);
+			}
 		}
 	}
 
